package qq

import (
	"github.com/crozz-net/gopenapi/qq/model/relation"
	"github.com/crozz-net/gopenapi/request"
	"net/url"
)

type api_relation struct {
	client_id string
}

/**
 * 收听腾讯微博上的用户。
 * 文档地址：http://wiki.connect.qq.com/add_idol
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 * @param name         要收听的用户的账户名列表。多个账户名之间用“,”隔开，例如：abc,bcde,cde。最多30个。
 *                     可选，name和fopenids至少选一个，若同时存在则以name值为主。
 * @param fopenids     要收听的用户的openid列表。多个openid之间用“_”隔开，
 *                     例如：B624064BA065E01CB73F835017FE96FA_B624064BA065E01CB73F835017FE96FB。最多30个。
 *                     可选，name和fopenids至少选一个，若同时存在则以name值为主。
 */
func (this *api_relation) Add_idol(access_token, openid, name, fopenids string) (*relation.Resp_add_idol, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("name", name)
	param.Add("fopenids", fopenids)

	obj := &relation.Resp_add_idol{}
	err := request.HttpPostAsObj(BASE_URL+"relation/add_idol", param, obj)

	return obj, err
}

/**
 * 取消收听腾讯微博上的用户。
 * 文档地址：http://wiki.connect.qq.com/del_idol
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 * @param name         要取消收听的用户的账户名。 可选，name和fopenid至少选一个，若同时存在则以name值为主。
 * @param fopenid      要取消收听的用户的openid。可选，name和fopenid至少选一个，若同时存在则以name值为主。
 */
func (this *api_relation) Del_idol(access_token, openid, name, fopenids string) (*relation.Resp_del_idol, error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("name", name)
	param.Add("fopenids", fopenids)

	obj := &relation.Resp_del_idol{}
	err := request.HttpPostAsObj(BASE_URL+"relation/del_idol", param, obj)

	return obj, err
}

/**
 * 获取登录用户的听众列表。
 * 文档地址：http://wiki.connect.qq.com/get_fanslist
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 * @param reqnum       必须。请求获取的听众个数。取值范围为1-30。
 * @param startindex   必须。请求获取听众列表的起始位置。第一页：0；继续向下翻页：reqnum*（page-1）。
 * @param mode         获取听众信息的模式。获取听众信息的模式，默认值为0。0：旧模式，新添加的听众信息排在前面，最多只能拉取1000个听众的信息。1：新模式，可以拉取所有听众的信息，暂时不支持排序。
 * @param install      判断获取的是安装应用的听众，还是未安装应用的听众。 0：不考虑该参数；1：获取已安装应用的听众信息；2：获取未安装应用的听众信息。
 * @param sex          按性别过滤标识，默认为0。此参数当mode=0时使用，支持排序。 1：获取的是男性听众信息；2：获取的是女性听众信息；0：不进行性别过滤，获取所有听众信息。
 */
func (this *api_relation) Get_fanslist(access_token, openid, reqnum, startindex, mode, install, sex string) (*relation.Resp_get_fanslist,
	error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("reqnum", reqnum)
	param.Add("startindex", startindex)
	param.Add("mode", mode)
	param.Add("install", install)
	param.Add("sex", sex)

	obj := &relation.Resp_get_fanslist{}
	err := request.HttpPostAsObj(BASE_URL+"relation/get_fanslist", param, obj)

	return obj, err
}

/**
 * 获取登录用户收听的人的列表。
 * 文档地址：http://wiki.connect.qq.com/get_idollist
 *
 * @param access_token 可通过使用Authorization_Code获取Access_Token 或来获取。access_token有3个月有效期。
 * @param openid       用户的ID，与QQ号码一一对应。
 * @param reqnum       必须。请求获取的听众个数。取值范围为1-30。
 * @param startindex   必须。请求获取听众列表的起始位置。第一页：0；继续向下翻页：reqnum*（page-1）。
 * @param mode         获取收听的人的信息模式，默认为0。
 *                     0：旧模式，新添加的收听的人信息排在前面，最多只能拉取1000个收听的人的信息。1：新模式，最多可拉取10000个收听的人的信息，暂不支持排序。
 * @param install      判断获取的是安装了应用的收听好友，还是未安装应用的收听好友。0：不考虑该参数；1：获取已安装应用的收听好友信息；2：获取未安装应用的收听好友信息。
 */
func (this *api_relation) Get_idollist(access_token, openid, reqnum, startindex, mode, install string) (*relation.Resp_get_idollist,
	error) {
	param := url.Values{}
	param.Add("oauth_consumer_key", this.client_id)
	param.Add("format", "json")
	param.Add("access_token", access_token)
	param.Add("openid", openid)
	param.Add("reqnum", reqnum)
	param.Add("startindex", startindex)
	param.Add("mode", mode)
	param.Add("install", install)

	obj := &relation.Resp_get_idollist{}
	err := request.HttpPostAsObj(BASE_URL+"relation/get_idollist", param, obj)

	return obj, err
}
